/* 
 * File:   Proceso.h
 * Author: max
 *
 * Created on April 29, 2013, 12:46 AM
 */

#ifndef PROCESO_H
#define	PROCESO_H

#include <vector>
#include <string>
#include <stdint.h>
#include "common_Excepcion.h"
#include "common_Thread.h"
#include "common_Mutex.h"

using namespace std;
using namespace TP;
using namespace TP::Threading;

namespace TP { namespace Procesos {

class Proceso : public Thread {

public:
    
    Proceso(uint32_t pId);
    
    virtual ~Proceso();
    
    uint32_t& getId();
    
    virtual void Iniciar() throw (Excepcion&);

    virtual void Finalizar() throw (Excepcion&);

    bool GetCorriendo ();

protected:
    
    virtual void tarea() = 0;
    
    bool SetCorriendo(bool pValor);

private:
    uint32_t _id;
    bool _corriendo;
    Mutex _finalizadoMutex;
};

}}

#endif	/* PROCESO_H */

